package cn.edu.jxust.core.domain.repository;

import cn.edu.jxust.common.domain.entity.SysResource;
import cn.edu.jxust.common.domain.dto.SysResourceVo;
import cn.edu.jxust.common.response.Result;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;

/**
 * @author QiuKangming
 * @since 2020-06-29
 */
public interface ResourceService extends IService<SysResource> {

    /*===========================资源操作=================================*/

    /**
     * 增加资源
     * @param sysResourceVo 资源视图对象
     * @return Result
     */
    Result addResource(SysResourceVo sysResourceVo);

    /**
     * 删除资源
     * @param id 资源id
     * @return Result
     */
    Result delResource(Integer id);

    /**
     * 修改资源信息
     * @param sysResourceVo 资源视图对象
     * @return Result
     */
    Result modifyResource(SysResourceVo sysResourceVo);

    /**
     * 获取当前资源的子资源的个数
     * @param id 资源id
     * @return int
     */
    int selectSubPermsByPermissionId(Integer id);

    /**
     * 资源管理的时候获取的列表
     * 资源管理的话只有超级管理员可以对权限增删改查
     * @param roleId 角色id
     * @return Result
     */
    Result getAuthorityTreeByRoleId(Integer roleId);

    /*===========================权限操作=================================*/

    /**
     * 根据当前用户的角色类型, 查询出他可操作的角色类型, 如果可操作的角色类型中没有传过来的角色 id,
     * 则无相应的权限, 如果有, 再根据角色 id 获取相应的
     * 权限结果集合返回, 可操作的按钮, 增删改查
     * @param roleId 角色id
     * @return Result
     */
    Result getAuthorityTreeSetAuthced(Integer roleId);

    /**
     * 获取父权限集合
     * @return Result
     */
    Result getParentAuthcList();

    /**
     * 根据资源ids获取权限码列表
     * @param ids 资源id
     * @return List<String>
     */
    List<String> getPermissionListByIds(List<Integer> ids);

    /*===========================生成菜单=================================*/

    /**
     * 根据角色 id 动态生成菜单列表
     * @param roleId 角色id
     * @return Result
     */
    Result getMenuTreeByRoleId(Integer roleId);

}
